package day09;

import java.lang.reflect.Array;

public class HW3 {
	
/*需求描述：
编写一个静态方法 print2DArray，接收任意类型的二维数组作为参数，返回与 Arrays.toString() 格式类似的字符串。
要求：
(1)支持 int[][]、String[][] 等常见数据类型
(2)正确处理空数组、null 元素等边界情况
(3)输出格式示例：[[1, 2], [3, 4], [5]] */

    public static String print2DArray(Object array) {
        // 处理整个数组为 null 的情况
        if (array == null) {
            return "null";
        }
        
        // 检查输入是否是数组
        if (!array.getClass().isArray()) {
            throw new IllegalArgumentException("Input is not an array");
        }
        
        // 检查是否二维数组（元素也是数组）
        int length = Array.getLength(array);
        StringBuilder sb = new StringBuilder();
        sb.append('[');
        
        for (int i = 0; i < length; i++) {
            Object row = Array.get(array, i);
            
            // 处理行元素为 null 的情况
            if (row == null) {
                sb.append("null");
            } 
            // 处理行元素是数组的情况
            else if (row.getClass().isArray()) {
                sb.append(oneDArrayToString(row));
            } 
            // 处理行元素不是数组的非法情况
            else {
                throw new IllegalArgumentException("Element at index " + i + " is not an array");
            }
            
            // 添加行间分隔符
            if (i < length - 1) {
                sb.append(", ");
            }
        }
        
        sb.append(']');
        return sb.toString();
    }

    // 辅助方法：格式化一维数组
    private static String oneDArrayToString(Object array) {
        // 处理数组为 null 的情况（理论上不会发生，但保持健壮性）
        if (array == null) {
            return "null";
        }
        
        int length = Array.getLength(array);
        StringBuilder sb = new StringBuilder();
        sb.append('[');
        
        for (int j = 0; j < length; j++) {
            Object element = Array.get(array, j);
            
            // 处理元素为 null 的情况
            if (element == null) {
                sb.append("null");
            } else {
                sb.append(element.toString());
            }
            
            // 添加元素间分隔符
            if (j < length - 1) {
                sb.append(", ");
            }
        }
        
        sb.append(']');
        return sb.toString();
    }

    // 测试用例
    public static void main(String[] args) {
        // 正常用例
        int[][] intArray = {{1, 2}, {3, 4}, {5}};
        System.out.println(print2DArray(intArray)); // [[1, 2], [3, 4], [5]]
        
        String[][] strArray = {{"a", "b"}, {"c"}, null};
        System.out.println(print2DArray(strArray)); // [[a, b], [c], null]
        
        // 空数组
        int[][] emptyArray = new int[0][];
        System.out.println(print2DArray(emptyArray)); // []
        
        // 行元素为 null
        String[][] nullRowArray = {{"x"}, null, {"y"}};
        System.out.println(print2DArray(nullRowArray)); // [[x], null, [y]]
        
        // 空行数组
        int[][] emptyRowArray = {new int[0], {1}};
        System.out.println(print2DArray(emptyRowArray)); // [[], [1]]
        
        // 元素为 null
        String[][] nullElementArray = {{"a", null}, {"b"}};
        System.out.println(print2DArray(nullElementArray)); // [[a, null], [b]]
        
        // 整个数组为 null
        int[][] nullArray = null;
        System.out.println(print2DArray(nullArray)); // null
    }
}